from requestMc import search, cursor
import types
import sys

def handle_command_helper(handler, args):
    """
    辅助函数，用于调用命令处理器并处理参数。
    """
    if callable(handler) and isinstance(handler, (types.LambdaType, types.FunctionType)):
        # 检查handler是否是一个可调用的lambda函数或普通函数
        # 如果是，则根据参数数量进行调用
        param_count = handler.__code__.co_argcount  # 获取函数参数数量（不包括self和*args, **kwargs）
        if param_count == 0:
            # 没有参数，直接调用
            return handler()
        elif param_count == 1:
            # 有一个参数，传递args（如果args为空，则传递None或适当默认值）
            return handler(args if args else None)
        else:
            # 如果有多个参数，这里可以添加更复杂的逻辑来处理
            # 但对于简单的命令行工具，通常只需要处理0个或1个参数的情况
            print("Command handler has unsupported number of parameters")
            return False
    else:
        # 如果handler不是可调用的，打印错误信息
        print("Invalid command handler")
        return False

def handle_command(command, args):

    help_content = ("目前2条指令可用\n"
                    "/search\n"
                    "/exit")

    command_handlers = {
        "help": lambda: print(help_content),
        "search": lambda: search(args if args else "No query provided"),
        "cursor": lambda: cursor(args if args else "No query provided"),
        "exit": lambda: (sys.exit(0), True)
    }

    # 获取命令处理器，如果不存在则返回None
    handler = command_handlers.get(command)

    # 如果没有找到对应的命令，打印未知命令消息
    if handler is None:
        print(f"Unknown command: /{command}")
        return False  # 返回False表示不需要退出程序

    # 执行命令处理器，如果处理器返回True，则表示需要退出程序
    exit_program = handle_command_helper(handler, " ".join(args) if args else None)
    return exit_program if isinstance(exit_program, bool) else False  # 确保返回的是布尔值


def main():
    print("摸鱼黑框框")
    while True:
        user_input = input(">>> ").strip()

        if not user_input.startswith("/"):
            print("Please enter/start with the instruction (e.g., /help, /search something, /exit to quit)")
            continue

        if (user_input[1:] != ''):
            command, *args = user_input[1:].split()
            # 处理命令，如果返回True则退出程序
            if handle_command(command, args):
                break


if __name__ == "__main__":
    main()